#ifndef _NGX_C_CONF_H_
#define _NGX_C_CONF_H_

#include <stdlib.h>
#include <vector>

/*
    单例的配置类
*/
class CConfig
{
private:
    // 配置项item
    typedef struct
    {
        char ItemName[50];
        char ItemContent[500];
    } CConfItem, *LPCConfItem;
public:
    // 打印配置类中所有配置信息，用于测试
    void show();
    // 析构，用于释放new出来的配置项信息LPCConfItem
    ~CConfig();
    // 读取配置信息
    bool Load(const char* pConfigName);
    // 获得字符串配置项
    char* GetString(const char* pItemName);
    // 获得整形配置项
    int GetIntDefault(const char* pItemName, const int def = 0);

    static CConfig* GetInstance()
    {
        if (m_instance == NULL)
        {
            m_instance = new CConfig();
            static CConfigDestory destory;
        }

        return m_instance;
    }

    // 这个类用于在析构的时候释放CConfig类对象
    class CConfigDestory
    {
    public:
        ~CConfigDestory()
        {
            if (CConfig::m_instance != NULL)
            {
                delete CConfig::m_instance;
                CConfig::m_instance = NULL;
            }
        }
    };

public:
    // 存储配置信息的列表
    std::vector<LPCConfItem> m_configItemList;
private:
    // 私有构造
    CConfig();
    // 单例实例
    static CConfig* m_instance;
};


#endif // _NGX_C_CONF_H_
